﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DECOR.BL.BE;
using DECOR.DL.DALCF;
using System.Security.Cryptography;
using CM.BL.BE;

namespace DECOR.BL.BC
{
    public class UsuarioBC
    {
        //private ConnectionType _contype = ConnectionType.NC03;

        #region Singleton
        private UsuarioBC() { }
        //private UsuarioBC(string pConType) { switch (pConType) { case "SAP": this._contype = ConnectionType.SAP; break; case "NCO3": this._contype = ConnectionType.NC03; break; } }
        private static UsuarioBC _instance = null;
        public static UsuarioBC Instance
        {
            get { return (_instance == null) ? _instance = new UsuarioBC() : _instance; }
        }
        //public static UsuarioBC Instance(string pConType)
        //{
        //    return (_instance == null) ? _instance = new UsuarioBC(pConType) : _instance;
        //}
        #endregion

        public List<UsuarioBE> listar()
        {
            return DaoFactory.UsuarioDALC.listar();
        }

        public string agregar(UsuarioBE objUsuario)
        {
            UsuarioBE objTmp = this.leer(objUsuario.Usuario_id);
            if (objTmp == null)
            {
                objTmp = null;
                objTmp = this.leer(objUsuario.Usuario);
                if (objTmp == null)
                {
                    objUsuario.Clave = ParametroBC.encryptString(objUsuario.Clave);
                    DaoFactory.UsuarioDALC.agregar(objUsuario);
                    return "";
                }
                else
                {
                    return "El Usuario ingresado ya existe.";
                }
            }
            else
            {
                return "El Código ingresado ya existe.";
            }
        }

        public bool actualizar(UsuarioBE objUsuario)
        {
            objUsuario.Clave = ParametroBC.encryptString(objUsuario.Clave);
            return DaoFactory.UsuarioDALC.actualizar(objUsuario);
        }

        public string cambiarClave(string pClaveAnterior, string pClaveNueva, UsuarioBE objUsuario)
        {
            //if (ParametroBC.encryptString(pClaveAnterior) == objUsuario.Clave)
            return "";
        }

        public void eliminar(int pUsuario_id)
        {
            DaoFactory.UsuarioDALC.eliminar(pUsuario_id);
        }

        public UsuarioBE leer(int pUsuario_id)
        {
            return DaoFactory.UsuarioDALC.leer(pUsuario_id);
        }

        public UsuarioBE leer(string pUsuario)
        {
            return DaoFactory.UsuarioDALC.leer(pUsuario);
        }

        public List<UsuarioBE> listar(UsuarioBE pObjUsuarioWeb)
        {
            return DaoFactory.UsuarioDALC.listar(pObjUsuarioWeb);
        }

        public string login(UsuarioBE objUsuario)
        {
            if (!objUsuario.Usuario.Trim().Equals("") && !objUsuario.Clave.Trim().Equals(""))
            {
                UsuarioBE objUsuarioWeb = DaoFactory.UsuarioDALC.leer(objUsuario.Usuario);
                if (objUsuarioWeb != null)
                {
                    UsuarioSAPBE objUsuarioSAP = UsuarioSAPBC.Instance.leer(objUsuarioWeb.UsuarioSAP_id);
                    if (objUsuarioSAP != null)
                    {
                        objUsuario.Clave = ParametroBC.encryptString(objUsuario.Clave);
                        if (DaoFactory.UsuarioDALC.login(objUsuario))
                        {
                            return "";
                        }
                        else
                        {
                            return "La Clave ingresada es incorrecta.";
                        }
                    }
                    else
                    {
                        return "El Usuario ingresado no tiene un Usuario SAP asignado.";
                    }
                }
                else
                {
                    return "El Usuario ingresado no existe.";
                }
            }
            return "Debe ingresar el Nombre de Usuario y la Clave.";
        }

        public static string login(ref RfcConfigParametersBE objUsuarioWeb)
        {
            if (!string.IsNullOrEmpty(objUsuarioWeb.UsuarioWEB) && !string.IsNullOrEmpty(objUsuarioWeb.PasswordWEB))
            {
                //DaoFactory.ConnType = this._contype;
                return DaoFactory.UsuarioDALC.login(ref objUsuarioWeb);
            }
            return "Debe ingresar el Nombre de Usuario y la Clave.";
        }
        public string actualizar(RfcConfigParametersBE pObjUsuarioWebBE)
        {
            if (!pObjUsuarioWebBE.Uname.Trim().Equals("") && !pObjUsuarioWebBE.Passwd.Trim().Equals(""))
            {
                return DaoFactory.UsuarioDALC.actualizar(pObjUsuarioWebBE);
            }
            return "Debe ingresar el Nombre de Usuario y la Clave.";
        }

        //WEBDIST
        public List<string> ObtenerOpcionesPorUsuario()
        {
            return DaoFactory.UsuarioDALC.ObtenerOpcionesPorUsuario();
        }

        public string logout(string id) {
            return DaoFactory.UsuarioDALC.logout(id);
        }
    }
}
